// PROGRAMA : IDCTAB01
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO, DETRAN E SEFAZ
// PROGRAMADOR : * DATA: 22/02/2003
// OBJETIVO : CONSULTA TABELA DE MUNICIPIO
// ATUALIZACOES DATA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Arrays;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctab01B;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabtc001;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idctab01 OBJETIVO : CONSULTA TABELA DE MUNICIPIO *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idctab01")
public class Idctab01 {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Idctab01B idctab01B;
	Tabtc001 tabtc001;
	// Includes utilizados
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idctab01 idctab01Anterior;
	String faseproc = "0";

	private int m = 0;
	private int j = 0;
	private int i = 0;
	private String[] ele = new String[13];
	private String tabdec = "";
	private long cod4 = 0;
	private String tabcha = "";
	private String jDescricao = "";
	private String jRia = "";

	private Idctab01B preMapas() {
		int i1;
		idctab01B = new Idctab01B(true, sessao);
		tabtc001 = new Tabtc001(true, sessao);
		Arrays.fill(ele, "");
		for (i1 = 1; i1 <= 14; i1++) {
			tabtc001.setTab0(i1, 0);
			tabtc001.setCod0(i1, 0);
			tabtc001.setCha0(i1, "");
			tabtc001.setDes0(i1, "");
			tabtc001.setGru0(i1, "");
			tabtc001.setObs0(i1, "");
			tabtc001.setObs0(i1, "");
			tabtc001.setDat0(i1, 0);
			tabtc001.setMat0(i1, 0);
		}
		return idctab01B;
	}

	public Idctab01(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Idctab01B idctab01B, Tabtc001 tabtc001, int codtab, String descri) {
		try {
			main(idctab01B, tabtc001, codtab, descri);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Idctab01B pidctab01B, Tabtc001 ptabtc001, int codtab, String descri) throws NumberFormatException, Exception {
		if (pidctab01B == null && ptabtc001 == null) {
			primeiraVez = true;
			// tabtc001 = new Tabtc001 (primeiraVez);
			idctab01B = preMapas();
			idctab01B.setNavegar("../idctab01/executar");
			idctab01B.setDataCorrente(UtilBean.inverteDataCorrente());
			sessao.getSisgsisp().setOperacao("CTD");
			// R0. REPEAT
			idctab01B.setCodtab(001);
			tabtc001.setConf("S");
			result.include("idctab01B", idctab01B);
			sessao.setAtributo("IDCTAB01", this);
			idctab01B.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pidctab01B, ptabtc001);
		}

		if (pidctab01B != null) {
			idctab01B.receberTela(false, result);
			// SETA PF'S
			if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
				idctab01B.enviarMensagem("operacao", "");
				return;
			}
		}
		switch (idctab01B.getOperacao()) {
		case "CTC": {
			monta();
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", idctab01B.getCodtab());
			if (idctab01B.getCodtab() == 001) {

				if (!idctab01B.getEnviadaEstado()) {
					result.include("idctab01B", idctab01B);
					sessao.setAtributo("IDCTAB01", this);
					idctab01B.enviarTelaEstado("uf", result, getClass().getSimpleName().toUpperCase());
					return;
				}
				// IDCTAB01
				tabcha = UtilBean.moveSubstring(tabcha, 0, 3, "N", 001);
				// Par�grafo: rep3()

				codtab = 0;
				// Par�grafo: rd3()
				while (vwDvetab.leituraTabchaMaiorig(tabcha, codtab)) {
					moveDvetab(ptabtc001);
					if (vwDvetab.fimDados()) {
						if (i > 0) {
							telao(ptabtc001);
						}
					}
					if (vwDvetab.quebraDiatabchalfa()) {
						if (!idctab01B.getUf().equals("  ") && i > 0) {
							telao(ptabtc001);
							break;
						}
					}
					if (tabtc001.getConf().equals("N")) {
						break;
					}
					if (idctab01B.getCodtab() > 0) {
						break;
					}
				}

			} else {
				if (idctab01B.getCodtab() == 18) {

					if (!idctab01B.getEnviadaOpcao()) {
						result.include("idctab01B", idctab01B);
						sessao.setAtributo("IDCTAB01", this);
						idctab01B.enviarTelaOpcao("jOpcao", result, getClass().getSimpleName().toUpperCase());
						return;
					}
					if (!(idctab01B.getJopcao().equals("A") || idctab01B.getJopcao().equals("E") || idctab01B.getJopcao().trim().equals(""))) {
						idctab01B.enviarMensagem(null, "");
						return;
					}
					tabcha = UtilBean.moveSubstring(tabcha, 0, 3, "N", 18);
					// Par�grafo: rep4()

					codtab = 0;
					// Par�grafo: rd4()
					while (vwDvetab.leituraTabeleMaiorig(18, (long) codtab)) {
						if (!idctab01B.getJopcao().trim().equals("")) {

							jDescricao = vwDvetab.getDescricaoElem();
							if (idctab01B.getJopcao().equals("E")) {
								if (!(idctab01B.getJopcao() == jRia)) {
									continue;
								}
							} else {
								if (jRia.equals("E")) {
									continue;
								}
							}
						}
						if (vwTabele.getCodigoTabela() != 18) {
							break;
						}
						moveDvetab(ptabtc001);
						if (vwDvetab.fimDados()) {
							if (i > 0) {
								telao(ptabtc001);
							}
						}
						if (tabtc001.getConf().equals("N")) {
							break;
						}
						if (idctab01B.getCodtab() > 0) {
							break;
						}
					}

				} else {
					// Par�grafo: rep1()

					j = 12;
					for (i = 12; i >= 1; i += -1) {
						if (UtilBean.validarMascara(ele[i], "N")) {

							cod4 = Long.parseLong(UtilBean.moveSubstring(cod4, j, 1, "A", ele[i]));
							j = j;
						}
					}
					vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", idctab01B.getCodtab());
					vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", cod4);
					codtab = 0;
					// Par�grafo: rd1()
					while (vwDvetab.leituraTabeleMaiorig(idctab01B.getCodtab(), cod4)) {
						moveDvetab(ptabtc001);
						if (vwDvetab.fimDados()) {
							if (i > 0) {
								telao(ptabtc001);
							}
						}
						if (tabtc001.getConf().equals("N")) {
							break;
						}
						if (idctab01B.getCodtab() > 0) {
							break;
						}
					}

				}
			}
			break;
		}
		case "CTD": {
			if (idctab01B.getCodtab() == 18) {

				if (!idctab01B.getEnviadaOpcao()) {
					result.include("idctab01B", idctab01B);
					sessao.setAtributo("IDCTAB01", this);
					idctab01B.enviarTelaOpcao("jOpcao", result, getClass().getSimpleName().toUpperCase());
					return;
				}
				// IDCTAB01
				if (!(idctab01B.getJopcao().equals("A") || idctab01B.getJopcao().equals("E") || idctab01B.getJopcao().trim().equals(""))) {
					idctab01B.enviarMensagem(null, "");
					return;
				}
				// Par�grafo: rep2()

				tabdec = UtilBean.moveSubstring(tabdec, 0, 3, "N", idctab01B.getCodtab());
				tabdec = UtilBean.moveSubstring(tabdec, 3, 60, "A", idctab01B.getDescri());
				codtab = 0;
				// Par�grafo: rd2()
				while (vwDvetab.leituraTabdecMaiorig(idctab01B.getCodtab(), idctab01B.getDescri())) {
					if (!idctab01B.getJopcao().trim().equals("")) {

						jDescricao = vwDvetab.getDescricaoElem();
						if (idctab01B.getJopcao().equals("E")) {
							if (!(idctab01B.getJopcao() == jRia)) {
								continue;
							}
						} else {
							if (jRia.equals("E")) {
								continue;
							}
						}
					}
					if (vwTabele.getCodigoTabela() != 18) {
						break;
					}
					moveDvetab(ptabtc001);
					if (vwDvetab.fimDados()) {
						if (i > 0) {
							telao(ptabtc001);
						}
					}
					if (tabtc001.getConf().equals("N")) {
						break;
					}
					if (idctab01B.getCodtab() > 0) {
						break;
					}
				}

			} else {
				// Par�grafo: rep5()

				tabdec = UtilBean.moveSubstring(tabdec, 0, 3, "N", idctab01B.getCodtab());
				tabdec = UtilBean.moveSubstring(tabdec, 3, 60, "A", idctab01B.getDescri());
				codtab = 0;
				// Par�grafo: rd5()
				while (vwDvetab.leituraTabdecMaiorig(idctab01B.getCodtab(), idctab01B.getDescri())) {
					moveDvetab(ptabtc001);
					if (vwDvetab.fimDados()) {
						if (i > 0) {
							telao(ptabtc001);
						}
					}
					if (tabtc001.getConf().equals("N")) {
						break;
					}
					if (idctab01B.getCodtab() > 0) {
						break;
					}
				}

			}
			break;
		}
		default: {
			UtilBean.salvaAcao("br.com.vti.sisp.mb.programa.Idcpa001"); // STACK
		}
		}
		sessao.setAtributo("IDCTAB01", this);
		result.include("tabtc001", tabtc001);
		tabtc001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		sessao.getSisgsisp().setOperacao("AIC");
		UtilBean.salvaAcao("br.com.vti.sisp.mb.programa.Idcpa001"); // STACK
	}

	// MENSAGENS DE ERROS DOS PROGRAMAS
	private void moveDvetab(Tabtc001 ptabtc001) {
		i += 1;
		if (vwDvetab.getCodigoTabela() != 18) {

			tabtc001.setCha0(i, vwDvetab.getChaveAlfaAcesso());
		}

		tabtc001.setObs0(i, vwDvetab.getObservacao());
		tabtc001.setGru0(i, vwDvetab.getGrupoElem());
		tabtc001.setDat0(i, vwDvetab.getDataAtualizacao());
		tabtc001.setMat0(i, vwDvetab.getMatriculaFunc());
		tabtc001.setTab0(i, vwDvetab.getCodigoTabela());
		tabtc001.setCod0(i, vwDvetab.getCodigoElem());
		tabtc001.setDes0(i, vwDvetab.getDescricaoElem());
		if (i == 14) {
			telao(ptabtc001);
		}
	}

	private void telao(Tabtc001 ptabtc001) {

		if (ptabtc001 == null) {
			result.include("tabtc001", tabtc001);
			sessao.setAtributo("IDCTAB01", this);
			tabtc001.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			tabtc001.receberTela(false, result);
		}
		if (!(idctab01B.getOperacao().equals("CTC") || idctab01B.getOperacao().equals("CTD"))) {
			funcoes.sissm001(result, sessao);
		}
		// PERFORM ROT01-WYZ-K7
		for (int i1 = 1; i1 <= 14; i1++) {
			tabtc001.setTab0(i1, 0);
			tabtc001.setCod0(i1, 0);
			tabtc001.setCha0(i1, "");
			tabtc001.setDes0(i1, "");
		}

		i = 0;
	} // END-REPEAT

	private void monta() throws NumberFormatException, Exception {
		m = 12;
		j = 12;
		do {
			if (UtilBean.validarMascara(ele[m], "N")) {

				cod4 = Long.parseLong(UtilBean.moveSubstring(cod4, j, 1, "A", ele[m]));
				j = j - 1;
			}

			m = m - 1;
		} while (!(m == 0));
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", cod4);
	}

	// SISCERRO}}} //UtilBean.mensagemTexto("!  ERROR NUMERO:" *ERROR-NR
	// "    LINHA:" *ERROR-LINE " PROGRAMA:" idctab01B.getNomeClasse()
	// tabtc001.getNomeClasse() "!");
	private void restaurarEstados(Idctab01B pidctab01B, Tabtc001 ptabtc001) {
		this.idctab01Anterior = (Idctab01) sessao.getAtributo("IDCTAB01");
		if (pidctab01B != null) {
			idctab01B = pidctab01B;
		} else {
			idctab01B = this.idctab01Anterior.idctab01B;
		}
		idctab01B.setSessao(sessao);
		if (ptabtc001 != null) {
			tabtc001 = ptabtc001;
		} else {
			tabtc001 = this.idctab01Anterior.tabtc001;
		}
		tabtc001.setSessao(sessao);
		this.faseproc = this.idctab01Anterior.faseproc;
	}
}
